关于UnityShader常用到的术语,会随着学习的进度持续在这篇文章中更新;
变量
变量类型(UnityShader的属性)
| 变量 | 类型 | 写法 |
|---|---|---|
| Int | 整数类型 | _Int ( “Int”, Int) = 2 |
| Float | 浮点数类型 | _Float ( “FloatValue”,Float ) = 0.0 |
| Range(min,max) | 范围值类型 | _Range ( “Range”,Range( 0.5, 1.0 )) = 1.0 |
| Color | 颜色类型 | _Color ( “MainColor”,Color ) = (1,1,1,1) |
| Vector | 向量类型 | _Vector ( “Vector4”, Vector ) = (1,1,1,1) |
| 2D | 2D纹理贴图 | _MainTex ( “Base(RGB)”,2D ) = “white” { } |
| 3D | 3D纹理贴图 | _3D(“3D”, 3D) = “black” { } |
| Cube | 三维纹理 | _CubeTex ( “3DMap”,Cube ) = “white” { } |
变量类型(CG程序)
| 变量 | 类型 |
|---|---|
| int | 32位整形数据 |
| half | 16位浮点数据 |
| float | 32位浮点数据,一个符号位 |
| fixed | 12位定点数 |
| sampler* | 纹理对象的句柄,分为sampler、sampler1D、sampler2D、sampler3D、samplerCUBE和samplerRECT |
| bool | 布尔数据,被所有的图形接口支持 |
| string | 字符类型 |
ShaderLab与CG的变量类型匹配
| ShaderLab | CG |
|---|---|
| Color/Vector | float4/half4/fixed4 |
| Range/Float | float/half/fixed |
| 2D | sample2D |
| Cube | sampleCube |
| 3D | sample3D |
UnityShader内置的时间变量
| 名称 | 类型 | 说明 |
|---|---|---|
| _Time | float4 | t是自该场景加载开始所经过的时间,4个分量分别是(t/20, t, 2t, 3t) |
| _SinTime | float4 | t是时间的正弦值,4个分量的值分别是(t/8, t/4, t/2, t) |
| _CosTime | float4 | t是时间的余弦值,4个分量的值分别是(t/8, t/4, t/2, t) |
| unity_DeltaTime | float4 | dt是时间增量,4个分量分别是(dt, 1/dt, smoothDt, 1/smoothDt) |
标签
标签类型(用于SubShader)
| 标签 | 作用 |
|---|---|
| Queue | 定义渲染顺序 |
| RenderType | Unity可以运行时替换符合特定RenderType的所有Shader |
| DisableBatching | 是否使用批处理 |
| ForceNoShadowCasting | 值为”true”时,表示不接受投射阴影 |
| IgnoreProjector | 值为”true”时,表示不接受Projector组件的投影;通常用于半透明物体; |
| CanUseSpriteAtlas | 当用于sprite时,将该标签设为False |
| PreviewType | 材质预览类型,默认是球形;可以设置成Plane,Skybox等; |
RenderType 渲染类型
| 渲染类型 | 用途 |
|---|---|
| Opaque | 绝大部分不透明的物体都使用这个 |
| Transparent | 绝大部分透明的物体、包括粒子特效都使用这个 |
| Background | 天空盒都使用这个 |
| Overlay | GUI、镜头光晕都使用这个 |
Queue 渲染队列参数
| 渲染队列 | 数值 | 应用场景 |
|---|---|---|
| Background | 1000 | 最早被调用的渲染,用来渲染天空盒或者背景 |
| Geometry | 2000 | 默认值,用来渲染非透明物体(场景中的绝大多数物体应该是非透明的) |
| AlphaTest | 2450 | 用来渲染经过AlphaTest的像素,单独为AlphaTest设定一个Queue是出于对效率的考虑 |
| Transparent | 3000 | 以从后往前的顺序渲染透明物体 |
| Overlay | 4000 | 用来渲染叠加的效果,是渲染的最后阶段(比如镜头光晕等特效) |
标签类型(用于Pass)
| 标签 | 作用 |
|---|---|
| LightMode | 定义该Pass在渲染流水线中的角色 |
| RequireOptions | 指定需要满足的条件 |
LOD 数值
在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,这个SubShader将不可用;
| LOD | 数值 |
|---|---|
| VertexLit及其系列 | 100 |
| Decal, Reflective VertexLit | 150 |
| Diffuse | 200 |
| Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit | 250 |
| Bumped, Specular | 300 |
| Bumped Specular | 400 |
| Parallax | 500 |
| Parallax Specular | 600 |
渲染状态
| 状态参数 | 作用 |
|---|---|
| Cull | 设置剔除模式:剔除背面Back/正面Front/关闭Off |
| ZTest | 深度测试 |
| ZWrite | 深度写入:开启On/关闭Off |
| Blend | 混合模式 |
语义
应用程序 -> 顶点函数 (a2v)
| 语义名称 | 意义 |
|---|---|
| POSITION | 顶点坐标(模型空间下的) |
| NORMAL | 法线( 模型空间下,用于计算光照) |
| TANGENT | 切线(模型空间下) |
| TEXCOORD0~n | 纹理坐标 |
| COLOR | 顶点颜色 |
顶点函数 -> 片元函数(v2f)
| 语义名称 | 意义 |
|---|---|
| SV_POSITION | 剪裁空间中的顶点坐标(一般是系统直接使用) |
| COLOR0 | 可以传递一组值 4个 |
| COLOR1 | 可以传递一组值 4个 |
| TEXCOORD0~7 | 传递纹理坐标,但不是必需的 |